package com.starhub.api.rag.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import com.starhub.application.rag.service.MilvusFlushService;
import com.starhub.common.bean.ResultResp;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;

/**
 * Milvus 刷新控制器
 * 用于手动管理 Milvus 集合的刷新操作
 * 
 * @version: V1.0
 * @author: liuhf
 */
@Slf4j
@RestController
@RequestMapping("/api/rag/milvus/flush")
@Api(value = "Milvus刷新管理", tags = {"Milvus刷新管理"})
public class MilvusFlushController {

    @Autowired
    private MilvusFlushService milvusFlushService;

    /**
     * 手动刷新指定集合
     * 
     * @param collectionName 集合名称
     * @return 刷新结果
     */
    @PostMapping("/{collectionName}")
    @ApiOperation("手动刷新指定集合")
    public ResultResp<Boolean> flushCollection(@PathVariable String collectionName) {
        try {
            boolean success = milvusFlushService.flushCollection(collectionName);
            if (success) {
                return ResultResp.success(true, "集合刷新成功");
            } else {
                return ResultResp.fail("集合刷新失败");
            }
        } catch (Exception e) {
            log.error("刷新集合时发生异常: {}", collectionName, e);
            return ResultResp.fail("刷新集合时发生异常: " + e.getMessage());
        }
    }

    /**
     * 检查集合是否需要刷新
     * 
     * @param collectionName 集合名称
     * @return 是否需要刷新
     */
    @GetMapping("/{collectionName}/needs-flush")
    @ApiOperation("检查集合是否需要刷新")
    public ResultResp<Boolean> needsFlush(@PathVariable String collectionName) {
        try {
            boolean needsFlush = milvusFlushService.needsFlush(collectionName);
            return ResultResp.success(needsFlush, "检查完成");
        } catch (Exception e) {
            log.error("检查集合刷新状态时发生异常: {}", collectionName, e);
            return ResultResp.fail("检查集合刷新状态时发生异常: " + e.getMessage());
        }
    }

    /**
     * 获取集合的最后刷新时间
     * 
     * @param collectionName 集合名称
     * @return 最后刷新时间
     */
    @GetMapping("/{collectionName}/last-flush-time")
    @ApiOperation("获取集合的最后刷新时间")
    public ResultResp<Long> getLastFlushTime(@PathVariable String collectionName) {
        try {
            Long lastFlushTime = milvusFlushService.getLastFlushTime(collectionName);
            return ResultResp.success(lastFlushTime, "获取成功");
        } catch (Exception e) {
            log.error("获取集合最后刷新时间时发生异常: {}", collectionName, e);
            return ResultResp.fail("获取集合最后刷新时间时发生异常: " + e.getMessage());
        }
    }
} 